package org.jeecg.access.platform.entity.publish;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import javax.persistence.Column;
import javax.persistence.Id;
import java.io.Serializable;
import java.util.List;

/**
 * @description: 平台内容实体类
 * 映射数据库表：platform_content
 * 功能：存储内容的核心信息，是多平台发布系统的基础数据载体，关联媒体资源并记录生命周期状态
 * @author: taogang
 * @date: 2025/8/11 16:44
 */
@Data
@TableName("platform_content")
public class Content implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 内容ID
     * 数据库主键，唯一标识一条内容
     * 生成规则：建议使用UUID或雪花算法，确保分布式环境下唯一
     * 示例："content_1234567890abcdef"
     */
    @Id
    private String id;

    /**
     * 内容名称/标题
     * 内容的核心标识，会作为发布到各平台的标题（如文章标题、视频标题）
     * 长度限制：建议前端控制在200字以内，避免超过部分平台的标题长度限制
     * 示例："2024年新品发布会邀请函"
     */
    @Column(name = "name")
    private String name;

    /**
     * 内容描述/正文
     * 内容的详细信息，可能是文章正文、视频简介等
     * 存储格式：纯文本或HTML（根据系统需求，若支持富文本则存储HTML）
     * 注意：发布到不同平台时可能需要根据平台规则进行格式转换（如微信公众号支持特定标签）
     * 示例："<p>尊敬的客户，诚邀您参加我司2024年新品发布会...</p>"
     */
    @Column(name = "description")
    private String description;

    @Column(name = "type")
    private String type;

    /**
     * 关联的媒体资源ID列表
     * 存储当前内容引用的所有媒体（图片/视频）的ID集合，通过JSON格式存储
     * 关联表：platform_media（媒体资源表），通过media_id关联
     * 用途：发布时根据此列表查询媒体详情，适配各平台的媒体要求（如微信需要media_id，微博需要URL）
     * 示例：["media_98765", "media_54321"]（JSON数组格式）
     */
    @Column(name = "media_ids", columnDefinition = "json")
    private List<String> mediaIds;

    /** 内容的作者 */
    @Column(name = "author")
    private String author;


    /**
     * 创建人ID
     * 记录内容的创建者，关联用户表的用户ID
     * 用途：用于权限控制（如仅创建者可编辑）和操作追溯
     * 示例："user_1001"
     */
    @Column(name = "creator")
    private String creator;

    /**
     * 创建时间
     * 内容的创建时间，格式：yyyyMMddHHmmss（字符串类型，如"20241001143025"）
     * 用途：用于内容排序（如按创建时间倒序展示）和生命周期管理
     * 注意：后端存储不做格式转换，前端展示时可转为"2024-10-01 14:30:25"
     */
    @Column(name = "create_time")
    private String createTime;

    /**
     * 最后更新人ID
     * 记录最后一次修改内容的用户ID，关联用户表
     * 用途：追踪内容的修改记录，便于协同编辑场景下的责任追溯
     * 示例："user_1002"（可能与creator不同，代表被其他用户编辑过）
     */
    @Column(name = "updater")
    private String updater;

    /**
     * 最后更新时间
     * 内容最后一次被修改的时间，格式：yyyyMMddHHmmss
     * 用途：判断内容是否被更新过，用于缓存失效和版本控制
     * 示例："20241001154530"
     */
    @Column(name = "update_time")
    private String updateTime;

    /**
     * 内容状态
     * 标识内容内部系统的的生命周期状态，通过枚举值控制
     * 建议枚举定义：
     * 0 初始状态
     * 1 删除
     */
    @Column(name = "state")
    private Integer state;
}
